home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / term-source.lha / FastMacroPanel.c < prev    next >
C/C++ Source or Header  |  1995-05-27  |  20KB  |  867 lines

  1. /*
  2. **    FastMacroPanel.c
  3. **
  4. **    Editing panel for fast! macros
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST,GAD_MACRO,GAD_CODE,
  13.         GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  14.         GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  15.         GAD_LOAD,GAD_SAVE,GAD_USE
  16.     };
  17.  
  18. BOOLEAN __regargs
  19. FastMacroPanel(struct List *FastMacroList,STRPTR LastFastMacros,struct Window *Parent,BYTE *pFastMacrosChanged)
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     BOOLEAN             MadeChanges,
  23.                  FastMacrosChanged;
  24.  
  25.     if(pFastMacrosChanged)
  26.         FastMacrosChanged = *pFastMacrosChanged;
  27.     else
  28.         FastMacrosChanged = FALSE;
  29.  
  30.     MadeChanges = FALSE;
  31.  
  32.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  33.         LH_LocaleHook,    &LocaleHook,
  34.     TAG_DONE))
  35.     {
  36.         struct Window    *FastWindow;
  37.         struct IBox     Bounds;
  38.  
  39.         LT_New(Handle,
  40.             LA_Type,    VERTICAL_KIND,
  41.         TAG_DONE);
  42.         {
  43.             LT_New(Handle,
  44.                 LA_Type,    VERTICAL_KIND,
  45.                 LA_LabelID,    MSG_V36_0037,
  46.             TAG_DONE);
  47.             {
  48.                 LT_New(Handle,
  49.                     LA_Type,    LISTVIEW_KIND,
  50.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_LIST_GAD,
  51.                     LA_LabelPlace,    PLACE_LEFT,
  52.                     LA_Chars,    30,
  53.                     LA_Lines,    10,
  54.                     LA_ID,        GAD_LIST,
  55.                     LALV_CursorKey,    TRUE,
  56.                     LALV_MaxGrowY,    20,
  57.                     LALV_MaxGrowX,    50,
  58.                     LALV_ResizeX,    TRUE,
  59.                     LALV_ResizeY,    TRUE,
  60.                     GTLV_Labels,    FastMacroList,
  61.  
  62.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  63.                 TAG_DONE);
  64.  
  65.                 LT_New(Handle,
  66.                     LA_Type,    STRING_KIND,
  67.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_GAD,
  68.                     LA_ID,        GAD_MACRO,
  69.                     GTST_MaxChars,    20,
  70.                     GA_Disabled,    TRUE,
  71.                 TAG_DONE);
  72.  
  73.                 LT_New(Handle,
  74.                     LA_Type,    STRING_KIND,
  75.                     LA_LabelID,    MSG_FASTMACROPANEL_MACRO_TEXT_GAD,
  76.                     LA_ID,        GAD_CODE,
  77.                     GTST_MaxChars,    255,
  78.                     GA_Disabled,    TRUE,
  79.                 TAG_DONE);
  80.  
  81.                 LT_EndGroup(Handle);
  82.             }
  83.  
  84.             LT_New(Handle,
  85.                 LA_Type,    HORIZONTAL_KIND,
  86.             TAG_DONE);
  87.             {
  88.                 LT_New(Handle,
  89.                     LA_Type,    HORIZONTAL_KIND,
  90.                     LA_LabelID,    MSG_V36_0038,
  91.                     LA_Spread,    TRUE,
  92.                     LA_SameSize,    TRUE,
  93.                 TAG_DONE);
  94.                 {
  95.                     LT_New(Handle,
  96.                         LA_Type,    TAPEDECK_KIND,
  97.                         LATD_ButtonType,TDBT_PREVIOUS,
  98.                         LATD_Smaller,    TRUE,
  99.                         LA_ID,        GAD_TOP,
  100.                         LA_NoKey,    TRUE,
  101.                         GA_Disabled,    TRUE,
  102.                     TAG_DONE);
  103.  
  104.                     LT_New(Handle,
  105.                         LA_Type,    TAPEDECK_KIND,
  106.                         LATD_ButtonType,TDBT_REWIND,
  107.                         LATD_Smaller,    TRUE,
  108.                         LA_ID,        GAD_UP,
  109.                         LA_NoKey,    TRUE,
  110.                         GA_Disabled,    TRUE,
  111.                     TAG_DONE);
  112.  
  113.                     LT_New(Handle,
  114.                         LA_Type,    TAPEDECK_KIND,
  115.                         LATD_ButtonType,TDBT_PLAY,
  116.                         LATD_Smaller,    TRUE,
  117.                         LA_ID,        GAD_DOWN,
  118.                         LA_NoKey,    TRUE,
  119.                         GA_Disabled,    TRUE,
  120.                     TAG_DONE);
  121.  
  122.                     LT_New(Handle,
  123.                         LA_Type,    TAPEDECK_KIND,
  124.                         LATD_ButtonType,TDBT_NEXT,
  125.                         LATD_Smaller,    TRUE,
  126.                         LA_ID,        GAD_END,
  127.                         LA_NoKey,    TRUE,
  128.                         GA_Disabled,    TRUE,
  129.                     TAG_DONE);
  130.  
  131.                     LT_EndGroup(Handle);
  132.                 }
  133.  
  134.                 LT_New(Handle,
  135.                     LA_Type,    HORIZONTAL_KIND,
  136.                     LA_LabelID,    MSG_V36_0043,
  137.                     LA_Spread,    TRUE,
  138.                     LA_SameSize,    TRUE,
  139.                 TAG_DONE);
  140.                 {
  141.                     LT_New(Handle,
  142.                         LA_Type,    BUTTON_KIND,
  143.                         LA_LabelID,    MSG_FASTMACROPANEL_NEW_GAD,
  144.                         LA_ID,        GAD_NEW,
  145.                     TAG_DONE);
  146.  
  147.                     LT_New(Handle,
  148.                         LA_Type,    BUTTON_KIND,
  149.                         LA_LabelID,    MSG_GLOBAL_REMOVE_GAD,
  150.                         LA_ID,        GAD_REMOVE,
  151.                         GA_Disabled,    TRUE,
  152.                     TAG_DONE);
  153.  
  154.                     LT_New(Handle,
  155.                         LA_Type,    BUTTON_KIND,
  156.                         LA_LabelID,    MSG_UPLOADQUEUE_CLEAR_TXT,
  157.                         LA_ID,        GAD_CLEAR,
  158.                         GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  159.                     TAG_DONE);
  160.  
  161.                     LT_EndGroup(Handle);
  162.                 }
  163.  
  164.                 LT_EndGroup(Handle);
  165.             }
  166.  
  167.             LT_New(Handle,
  168.                 LA_Type,    VERTICAL_KIND,
  169.             TAG_DONE);
  170.             {
  171.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  172.  
  173.                 LT_EndGroup(Handle);
  174.             }
  175.  
  176.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  177.                 LAGR_SameSize,    TRUE,
  178.                 LAGR_Spread,    TRUE,
  179.                 LA_ExtraSpace,    TRUE,
  180.             TAG_DONE);
  181.             {
  182.                 LT_New(Handle,
  183.                     LA_Type,    BUTTON_KIND,
  184.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  185.                     LA_ID,        GAD_USE,
  186.                     LABT_ReturnKey,    TRUE,
  187.                     LABT_ExtraFat,    TRUE,
  188.                 TAG_DONE);
  189.  
  190.                 LT_New(Handle,
  191.                     LA_Type,    BUTTON_KIND,
  192.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  193.                     LA_ID,        GAD_LOAD,
  194.                     LABT_ExtraFat,    TRUE,
  195.                 TAG_DONE);
  196.  
  197.                 LT_New(Handle,
  198.                     LA_Type,    BUTTON_KIND,
  199.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  200.                     LA_ID,        GAD_SAVE,
  201.                     LABT_ExtraFat,    TRUE,
  202.                     GA_Disabled,    FastMacroList -> lh_Head -> ln_Succ == NULL,
  203.                 TAG_DONE);
  204.  
  205.                 LT_EndGroup(Handle);
  206.             }
  207.  
  208.             LT_EndGroup(Handle);
  209.         }
  210.  
  211.         if(Screen && Window)
  212.         {
  213.             Bounds . Left    = Window -> LeftEdge;
  214.             Bounds . Top    = Window -> TopEdge;
  215.             Bounds . Width    = Window -> Width;
  216.             Bounds . Height    = Window -> Height;
  217.         }
  218.  
  219.         if(FastWindow = LT_Layout(Handle,LocaleString(MSG_FASTMACROPANEL_FAST_MACRO_PREFERENCES_TXT),Screen ? &Bounds : NULL,0,0,IDCMP_CLOSEWINDOW,0,
  220.             LAWN_HelpHook,        &GuideHook,
  221.             LAWN_Parent,        Parent,
  222.             WA_DepthGadget,        TRUE,
  223.             WA_CloseGadget,        TRUE,
  224.             WA_DragBar,        TRUE,
  225.             WA_RMBTrap,        TRUE,
  226.             WA_Activate,        TRUE,
  227.         TAG_DONE))
  228.         {
  229.             struct IntuiMessage    *Message;
  230.             BOOLEAN             Done = FALSE;
  231.             ULONG             MsgClass,
  232.                          MsgQualifier;
  233.             UWORD             MsgCode;
  234.             struct Gadget        *MsgGadget;
  235.  
  236.             struct MacroNode    *Node,*Selected = NULL;
  237.             ULONG             Offset = 0;
  238.  
  239.             UBYTE              DummyBuffer[MAX_FILENAME_LENGTH],
  240.                         *DummyChar;
  241.             struct FileRequester    *FileRequest;
  242.  
  243.             GuideContext(CONTEXT_FASTMACROS);
  244.  
  245.             PushWindow(FastWindow);
  246.  
  247.             LT_ShowWindow(Handle,TRUE);
  248.  
  249.             do
  250.             {
  251.                 if(Wait(PORTMASK(FastWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  252.                     break;
  253.  
  254.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  255.                 {
  256.                     MsgClass    = Message -> Class;
  257.                     MsgQualifier    = Message -> Qualifier;
  258.                     MsgCode        = Message -> Code;
  259.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  260.  
  261.                     LT_ReplyIMsg(Message);
  262.  
  263.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  264.                         Done = TRUE;
  265.  
  266.                     if(MsgClass == IDCMP_GADGETUP)
  267.                     {
  268.                         switch(MsgGadget -> GadgetID)
  269.                         {
  270.                             case GAD_USE:
  271.  
  272.                                 Done = TRUE;
  273.                                 break;
  274.  
  275.                             case GAD_TOP:
  276.  
  277.                                 LT_SetAttributes(Handle,GAD_LIST,
  278.                                     GTLV_Labels,    ~0,
  279.                                 TAG_DONE);
  280.  
  281.                                 Remove((struct Node *)Selected);
  282.  
  283.                                 AddHead(FastMacroList,(struct Node *)Selected);
  284.  
  285.                                 RefreshFastWindow(TRUE);
  286.  
  287.                                 Offset = 0;
  288.  
  289.                                 LT_SetAttributes(Handle,GAD_LIST,
  290.                                     GTLV_Labels,    FastMacroList,
  291.                                     GTLV_Selected,    Offset,
  292.                                     GTLV_Top,    Offset,
  293.                                 TAG_DONE);
  294.  
  295.                                 LT_SetAttributes(Handle,GAD_TOP,
  296.                                     GA_Disabled,    TRUE,
  297.                                 TAG_DONE);
  298.  
  299.                                 LT_SetAttributes(Handle,GAD_UP,
  300.                                     GA_Disabled,    TRUE,
  301.                                 TAG_DONE);
  302.  
  303.                                 LT_SetAttributes(Handle,GAD_DOWN,
  304.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  305.                                 TAG_DONE);
  306.  
  307.                                 LT_SetAttributes(Handle,GAD_END,
  308.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  309.                                 TAG_DONE);
  310.  
  311.                                 MadeChanges = TRUE;
  312.  
  313.                                 break;
  314.  
  315.                             case GAD_UP:
  316.  
  317.                                 LT_SetAttributes(Handle,GAD_LIST,
  318.                                     GTLV_Labels,    ~0,
  319.                                 TAG_DONE);
  320.  
  321.                                 Node = Selected -> mn_Pred -> mn_Pred;
  322.  
  323.                                 Remove((struct Node *)Selected);
  324.  
  325.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  326.  
  327.                                 RefreshFastWindow(TRUE);
  328.  
  329.                                 Offset--;
  330.  
  331.                                 LT_SetAttributes(Handle,GAD_LIST,
  332.                                     GTLV_Labels,    FastMacroList,
  333.                                     GTLV_Selected,    Offset,
  334.                                     GTLV_Top,    Offset,
  335.                                 TAG_DONE);
  336.  
  337.                                 LT_SetAttributes(Handle,GAD_TOP,
  338.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  339.                                 TAG_DONE);
  340.  
  341.                                 LT_SetAttributes(Handle,GAD_UP,
  342.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  343.                                 TAG_DONE);
  344.  
  345.                                 LT_SetAttributes(Handle,GAD_DOWN,
  346.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  347.                                 TAG_DONE);
  348.  
  349.                                 LT_SetAttributes(Handle,GAD_END,
  350.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  351.                                 TAG_DONE);
  352.  
  353.                                 MadeChanges = TRUE;
  354.  
  355.                                 break;
  356.  
  357.                             case GAD_DOWN:
  358.  
  359.                                 LT_SetAttributes(Handle,GAD_LIST,
  360.                                     GTLV_Labels,    ~0,
  361.                                 TAG_DONE);
  362.  
  363.                                 Node = Selected -> mn_Succ;
  364.  
  365.                                 Remove((struct Node *)Selected);
  366.  
  367.                                 Insert(FastMacroList,(struct Node *)Selected,(struct Node *)Node);
  368.  
  369.                                 RefreshFastWindow(TRUE);
  370.  
  371.                                 Offset++;
  372.  
  373.                                 LT_SetAttributes(Handle,GAD_LIST,
  374.                                     GTLV_Labels,    FastMacroList,
  375.                                     GTLV_Selected,    Offset,
  376.                                     GTLV_Top,    Offset,
  377.                                 TAG_DONE);
  378.  
  379.                                 LT_SetAttributes(Handle,GAD_TOP,
  380.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  381.                                 TAG_DONE);
  382.  
  383.                                 LT_SetAttributes(Handle,GAD_UP,
  384.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  385.                                 TAG_DONE);
  386.  
  387.                                 LT_SetAttributes(Handle,GAD_DOWN,
  388.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  389.                                 TAG_DONE);
  390.  
  391.                                 LT_SetAttributes(Handle,GAD_END,
  392.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  393.                                 TAG_DONE);
  394.  
  395.                                 MadeChanges = TRUE;
  396.  
  397.                                 break;
  398.  
  399.                             case GAD_END:
  400.  
  401.                                 LT_SetAttributes(Handle,GAD_LIST,
  402.                                     GTLV_Labels,    ~0,
  403.                                 TAG_DONE);
  404.  
  405.                                 Remove((struct Node *)Selected);
  406.  
  407.                                 AddTail(FastMacroList,(struct Node *)Selected);
  408.  
  409.                                 RefreshFastWindow(TRUE);
  410.  
  411.                                 Offset = FastMacroCount - 1;
  412.  
  413.                                 LT_SetAttributes(Handle,GAD_LIST,
  414.                                     GTLV_Labels,    FastMacroList,
  415.                                     GTLV_Selected,    Offset,
  416.                                     GTLV_Top,    Offset,
  417.                                 TAG_DONE);
  418.  
  419.                                 LT_SetAttributes(Handle,GAD_TOP,
  420.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  421.                                 TAG_DONE);
  422.  
  423.                                 LT_SetAttributes(Handle,GAD_UP,
  424.                                     GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  425.                                 TAG_DONE);
  426.  
  427.                                 LT_SetAttributes(Handle,GAD_DOWN,
  428.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  429.                                 TAG_DONE);
  430.  
  431.                                 LT_SetAttributes(Handle,GAD_END,
  432.                                     GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  433.                                 TAG_DONE);
  434.  
  435.                                 MadeChanges = TRUE;
  436.  
  437.                                 break;
  438.  
  439.                             case GAD_NEW:
  440.  
  441.                                 if(Node = NewFastMacro(LocaleString(MSG_FASTMACROPANEL_UNNAMED_TXT),""))
  442.                                 {
  443.                                     LT_SetAttributes(Handle,GAD_LIST,
  444.                                         GTLV_Labels,    ~0,
  445.                                     TAG_DONE);
  446.  
  447.                                     AddTail(FastMacroList,(struct Node *)Node);
  448.  
  449.                                     RefreshFastWindow(TRUE);
  450.  
  451.                                     LT_SetAttributes(Handle,GAD_LIST,
  452.                                         GTLV_Labels,    FastMacroList,
  453.                                         GTLV_Selected,    FastMacroCount++,
  454.                                     TAG_DONE);
  455.  
  456.                                     LT_SetAttributes(Handle,GAD_CODE,
  457.                                         GTST_String,    "",
  458.                                         GA_Disabled,    FALSE,
  459.                                     TAG_DONE);
  460.  
  461.                                     LT_SetAttributes(Handle,GAD_MACRO,
  462.                                         GTST_String,    Node -> mn_Macro,
  463.                                         GA_Disabled,    FALSE,
  464.                                     TAG_DONE);
  465.  
  466.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  467.                                         GA_Disabled,    FALSE,
  468.                                     TAG_DONE);
  469.  
  470.                                     LT_SetAttributes(Handle,GAD_SAVE,
  471.                                         GA_Disabled,    FALSE,
  472.                                     TAG_DONE);
  473.  
  474.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  475.                                         GA_Disabled,    FALSE,
  476.                                     TAG_DONE);
  477.  
  478.                                     Selected = Node;
  479.  
  480.                                     Offset = MsgCode;
  481.  
  482.                                     LT_SetAttributes(Handle,GAD_TOP,
  483.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  484.                                     TAG_DONE);
  485.  
  486.                                     LT_SetAttributes(Handle,GAD_UP,
  487.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  488.                                     TAG_DONE);
  489.  
  490.                                     LT_SetAttributes(Handle,GAD_DOWN,
  491.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  492.                                     TAG_DONE);
  493.  
  494.                                     LT_SetAttributes(Handle,GAD_END,
  495.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  496.                                     TAG_DONE);
  497.  
  498.                                     LT_Activate(Handle,GAD_MACRO);
  499.  
  500.                                     MadeChanges = TRUE;
  501.                                 }
  502.                                 else
  503.                                     DisplayBeep(FastWindow -> WScreen);
  504.  
  505.                                 break;
  506.  
  507.                             case GAD_CLEAR:
  508.  
  509.                                 LT_SetAttributes(Handle,GAD_LIST,
  510.                                     GTLV_Labels,    ~0,
  511.                                 TAG_DONE);
  512.  
  513.                                 FreeList(FastMacroList);
  514.  
  515.                                 RefreshFastWindow(TRUE);
  516.  
  517.                                 FastMacroCount = 0;
  518.  
  519.                                 LT_SetAttributes(Handle,GAD_LIST,
  520.                                     GTLV_Labels,    FastMacroList,
  521.                                     GTLV_Selected,    ~0,
  522.                                 TAG_DONE);
  523.  
  524.                                 Selected = NULL;
  525.  
  526.                                 LT_SetAttributes(Handle,GAD_TOP,
  527.                                     GA_Disabled,    TRUE,
  528.                                 TAG_DONE);
  529.  
  530.                                 LT_SetAttributes(Handle,GAD_UP,
  531.                                     GA_Disabled,    TRUE,
  532.                                 TAG_DONE);
  533.  
  534.                                 LT_SetAttributes(Handle,GAD_DOWN,
  535.                                     GA_Disabled,    TRUE,
  536.                                 TAG_DONE);
  537.  
  538.                                 LT_SetAttributes(Handle,GAD_END,
  539.                                     GA_Disabled,    TRUE,
  540.                                 TAG_DONE);
  541.  
  542.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  543.                                     GA_Disabled,    TRUE,
  544.                                 TAG_DONE);
  545.  
  546.                                 LT_SetAttributes(Handle,GAD_MACRO,
  547.                                     GTST_String,    "",
  548.                                     GA_Disabled,    TRUE,
  549.                                 TAG_DONE);
  550.  
  551.                                 LT_SetAttributes(Handle,GAD_CODE,
  552.                                     GTST_String,    "",
  553.                                     GA_Disabled,    TRUE,
  554.                                 TAG_DONE);
  555.  
  556.                                 LT_SetAttributes(Handle,GAD_SAVE,
  557.                                     GA_Disabled,    TRUE,
  558.                                 TAG_DONE);
  559.  
  560.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  561.                                     GA_Disabled,    TRUE,
  562.                                 TAG_DONE);
  563.  
  564.                                 MadeChanges = FastMacrosChanged = FALSE;
  565.  
  566.                                 break;
  567.  
  568.                             case GAD_REMOVE:
  569.  
  570.                                 if(Selected)
  571.                                 {
  572.                                     LT_SetAttributes(Handle,GAD_LIST,
  573.                                         GTLV_Labels,    ~0,
  574.                                     TAG_DONE);
  575.  
  576.                                     if(--FastMacroCount)
  577.                                     {
  578.                                         if(Selected -> mn_Succ -> mn_Succ)
  579.                                             Node = Selected -> mn_Succ;
  580.                                         else
  581.                                         {
  582.                                             Node = Selected -> mn_Pred;
  583.  
  584.                                             Offset = 0;
  585.                                         }
  586.                                     }
  587.  
  588.                                     FreeNode((struct Node *)Selected);
  589.  
  590.                                     RefreshFastWindow(TRUE);
  591.  
  592.                                     LT_SetAttributes(Handle,GAD_LIST,
  593.                                         GTLV_Labels,    FastMacroList,
  594.                                         GTLV_Selected,    Node -> mn_Succ ? GetNodeOffset((struct Node *)Node,FastMacroList) : ~0,
  595.                                     TAG_DONE);
  596.  
  597.                                     if(!FastMacroCount)
  598.                                     {
  599.                                         Selected = NULL;
  600.  
  601.                                         LT_SetAttributes(Handle,GAD_TOP,
  602.                                             GA_Disabled,    TRUE,
  603.                                         TAG_DONE);
  604.  
  605.                                         LT_SetAttributes(Handle,GAD_UP,
  606.                                             GA_Disabled,    TRUE,
  607.                                         TAG_DONE);
  608.  
  609.                                         LT_SetAttributes(Handle,GAD_DOWN,
  610.                                             GA_Disabled,    TRUE,
  611.                                         TAG_DONE);
  612.  
  613.                                         LT_SetAttributes(Handle,GAD_END,
  614.                                             GA_Disabled,    TRUE,
  615.                                         TAG_DONE);
  616.  
  617.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  618.                                             GA_Disabled,    TRUE,
  619.                                         TAG_DONE);
  620.  
  621.                                         LT_SetAttributes(Handle,GAD_MACRO,
  622.                                             GTST_String,    "",
  623.                                             GA_Disabled,    TRUE,
  624.                                         TAG_DONE);
  625.  
  626.                                         LT_SetAttributes(Handle,GAD_CODE,
  627.                                             GTST_String,    "",
  628.                                             GA_Disabled,    TRUE,
  629.                                         TAG_DONE);
  630.  
  631.                                         LT_SetAttributes(Handle,GAD_SAVE,
  632.                                             GA_Disabled,    TRUE,
  633.                                         TAG_DONE);
  634.  
  635.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  636.                                             GA_Disabled,    TRUE,
  637.                                         TAG_DONE);
  638.                                     }
  639.                                     else
  640.                                     {
  641.                                         Selected = Node;
  642.  
  643.                                         LT_SetAttributes(Handle,GAD_CODE,
  644.                                             GTST_String,    Selected -> mn_Code,
  645.                                         TAG_DONE);
  646.  
  647.                                         LT_SetAttributes(Handle,GAD_MACRO,
  648.                                             GTST_String,    Selected -> mn_Macro,
  649.                                         TAG_DONE);
  650.  
  651.                                         LT_SetAttributes(Handle,GAD_TOP,
  652.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  653.                                         TAG_DONE);
  654.  
  655.                                         LT_SetAttributes(Handle,GAD_UP,
  656.                                             GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  657.                                         TAG_DONE);
  658.  
  659.                                         LT_SetAttributes(Handle,GAD_DOWN,
  660.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  661.                                         TAG_DONE);
  662.  
  663.                                         LT_SetAttributes(Handle,GAD_END,
  664.                                             GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  665.                                         TAG_DONE);
  666.                                     }
  667.  
  668.                                     MadeChanges = TRUE;
  669.                                 }
  670.  
  671.                                 break;
  672.  
  673.                             case GAD_LIST:
  674.  
  675.                                 if(Selected = (struct MacroNode *)GetListNode(MsgCode,FastMacroList))
  676.                                 {
  677.                                     Offset = MsgCode;
  678.  
  679.                                     LT_SetAttributes(Handle,GAD_MACRO,
  680.                                         GTST_String,    Selected -> mn_Macro,
  681.                                         GA_Disabled,    FALSE,
  682.                                     TAG_DONE);
  683.  
  684.                                     LT_SetAttributes(Handle,GAD_CODE,
  685.                                         GTST_String,    Selected -> mn_Code,
  686.                                         GA_Disabled,    FALSE,
  687.                                     TAG_DONE);
  688.  
  689.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  690.                                         GA_Disabled,    FALSE,
  691.                                     TAG_DONE);
  692.  
  693.                                     LT_SetAttributes(Handle,GAD_TOP,
  694.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  695.                                     TAG_DONE);
  696.  
  697.                                     LT_SetAttributes(Handle,GAD_UP,
  698.                                         GA_Disabled,    !Selected -> mn_Pred -> mn_Pred,
  699.                                     TAG_DONE);
  700.  
  701.                                     LT_SetAttributes(Handle,GAD_DOWN,
  702.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  703.                                     TAG_DONE);
  704.  
  705.                                     LT_SetAttributes(Handle,GAD_END,
  706.                                         GA_Disabled,    !Selected -> mn_Succ -> mn_Succ,
  707.                                     TAG_DONE);
  708.                                 }
  709.  
  710.                                 break;
  711.  
  712.                             case GAD_MACRO:
  713.  
  714.                                 if(Selected)
  715.                                 {
  716.                                     LT_SetAttributes(Handle,GAD_LIST,
  717.                                         GTLV_Labels,    ~0,
  718.                                     TAG_DONE);
  719.  
  720.                                     strcpy(Selected -> mn_Macro,(STRPTR)LT_GetAttributes(Handle,GAD_MACRO,TAG_DONE));
  721.  
  722.                                     RefreshFastWindow(TRUE);
  723.  
  724.                                     LT_SetAttributes(Handle,GAD_LIST,
  725.                                         GTLV_Labels,    FastMacroList,
  726.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,FastMacroList),
  727.                                     TAG_DONE);
  728.  
  729.                                     LT_SetAttributes(Handle,GAD_CODE,
  730.                                         GTST_String,    Selected -> mn_Code,
  731.                                     TAG_DONE);
  732.  
  733.                                     MadeChanges = TRUE;
  734.  
  735.                                     LT_Activate(Handle,GAD_CODE);
  736.                                 }
  737.  
  738.                                 break;
  739.  
  740.                             case GAD_CODE:
  741.  
  742.                                 if(Selected)
  743.                                 {
  744.                                     strcpy(Selected -> mn_Code,(STRPTR)LT_GetAttributes(Handle,GAD_CODE,TAG_DONE));
  745.  
  746.                                     MadeChanges = TRUE;
  747.                                 }
  748.  
  749.                                 break;
  750.  
  751.                             case GAD_LOAD:
  752.  
  753.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  754.  
  755.                                 LT_LockWindow(FastWindow);
  756.  
  757.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_LOAD_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  758.                                 {
  759.                                     LT_SetAttributes(Handle,GAD_LIST,
  760.                                         GTLV_Labels,    ~0,
  761.                                     TAG_DONE);
  762.  
  763.                                     Selected = NULL;
  764.  
  765.                                     if(!LoadFastMacros(DummyBuffer,FastMacroList))
  766.                                         ShowError(FastWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  767.                                     else
  768.                                     {
  769.                                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  770.  
  771.                                         strcpy(LastFastMacros,DummyBuffer);
  772.  
  773.                                         MadeChanges = FastMacrosChanged = FALSE;
  774.                                     }
  775.  
  776.                                     LT_SetAttributes(Handle,GAD_LIST,
  777.                                         GTLV_Labels,    FastMacroList,
  778.                                     TAG_DONE);
  779.  
  780.                                     LT_SetAttributes(Handle,GAD_CODE,
  781.                                         GTST_String,    "",
  782.                                         GA_Disabled,    TRUE,
  783.                                     TAG_DONE);
  784.  
  785.                                     LT_SetAttributes(Handle,GAD_MACRO,
  786.                                         GTST_String,    "",
  787.                                         GA_Disabled,    TRUE,
  788.                                     TAG_DONE);
  789.  
  790.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  791.                                         GA_Disabled,    TRUE,
  792.                                     TAG_DONE);
  793.  
  794.                                     LT_SetAttributes(Handle,GAD_TOP,
  795.                                         GA_Disabled,    TRUE,
  796.                                     TAG_DONE);
  797.  
  798.                                     LT_SetAttributes(Handle,GAD_UP,
  799.                                         GA_Disabled,    TRUE,
  800.                                     TAG_DONE);
  801.  
  802.                                     LT_SetAttributes(Handle,GAD_DOWN,
  803.                                         GA_Disabled,    TRUE,
  804.                                     TAG_DONE);
  805.  
  806.                                     LT_SetAttributes(Handle,GAD_END,
  807.                                         GA_Disabled,    TRUE,
  808.                                     TAG_DONE);
  809.  
  810.                                     LT_SetAttributes(Handle,GAD_SAVE,
  811.                                         GA_Disabled,    !FastMacroCount,
  812.                                     TAG_DONE);
  813.  
  814.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  815.                                         GA_Disabled,    !FastMacroCount,
  816.                                     TAG_DONE);
  817.  
  818.                                     RefreshFastWindow(TRUE);
  819.  
  820.                                     FreeAslRequest(FileRequest);
  821.                                 }
  822.  
  823.                                 LT_UnlockWindow(FastWindow);
  824.  
  825.                                 break;
  826.  
  827.                             case GAD_SAVE:
  828.  
  829.                                 SplitFileName(LastFastMacros,&DummyChar,DummyBuffer);
  830.  
  831.                                 LT_LockWindow(FastWindow);
  832.  
  833.                                 if(FileRequest = GetFile(FastWindow,LocaleString(MSG_FASTMACROPANEL_SAVE_FAST_MACRO_SETTINGS_TXT),DummyBuffer,FilePart(LastFastMacros),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  834.                                 {
  835.                                     if(!SaveFastMacros(DummyBuffer,FastMacroList))
  836.                                         ShowError(FastWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  837.                                     else
  838.                                     {
  839.                                         strcpy(LastFastMacros,DummyBuffer);
  840.  
  841.                                         MadeChanges = FastMacrosChanged = FALSE;
  842.                                     }
  843.  
  844.                                     FreeAslRequest(FileRequest);
  845.                                 }
  846.  
  847.                                 LT_UnlockWindow(FastWindow);
  848.  
  849.                                 break;
  850.                         }
  851.                     }
  852.                 }
  853.             }
  854.             while(!Done);
  855.  
  856.             PopWindow();
  857.         }
  858.  
  859.         LT_DeleteHandle(Handle);
  860.     }
  861.  
  862.     if(pFastMacrosChanged)
  863.         *pFastMacrosChanged = FastMacrosChanged;
  864.  
  865.     return(MadeChanges);
  866. }
  867.